package debugtime

import (
	"fmt"
	"time"
)

// DebugT ..
type DebugT struct {
	lastTime  time.Time
	startTime time.Time
	logs      [][]interface{}
}

// InitDebigTime 初始化
func InitDebigTime() *DebugT {
	dt := &DebugT{}
	dt.startTime = time.Now()
	dt.lastTime = dt.startTime
	dt.logs = [][]interface{}{
		{"==== 开始 ====:", dt.startTime},
	}
	return dt
}

// MarkTime 标记时间
func (dt *DebugT) MarkTime(label string) {
	dt.handMarkTime(" -- [" + label + "]间隔时长")
}

// EndMark 结束标记
func (dt *DebugT) EndMark() {
	dt.lastTime = dt.startTime
	dt.handMarkTime("==== 结束 ====, 共计")
}

// Print 打印
func (dt *DebugT) Print() {
	for _, v := range dt.logs {
		fmt.Println(v...)
	}
}

func (dt *DebugT) handMarkTime(label string) {
	nowTime := time.Now()
	nano, second := diffTwoTime(nowTime, dt.lastTime)
	dt.logs = append(dt.logs, []interface{}{
		fmt.Sprintf("%s: %d 纳秒 => %f 秒", label, nano, second),
	})
	dt.lastTime = nowTime
}

func diffTwoTime(st, et time.Time) (nano int64, second float64) {
	nano = st.Sub(et).Nanoseconds()
	second = float64(nano) / 10e8
	return
}
